// import com->alibaba->druid->FastsqlException;
// import com->alibaba->druid->sql->ast->SQLDataType*;
// import com->alibaba->druid->sql->ast->SQLDataTypeImpl;
// import com->alibaba->druid->sql->ast->SQLExpr;
// import com->alibaba->druid->sql->ast->SQLExprImpl;
// import com->alibaba->druid->sql->visitor->SQLASTVisitor*;

// import java->io->IOException;
// import java->util->Collections;
// import java->util->List;
#pragma once

#include <sstream>
#include "../SQLExprImpl.h"
#include "../SQLExpr.h"
#include "SQLLiteralExpr.h"
#include "SQLValuableExpr.h"

#include "../SQLDataType.h"
class SQLASTVisitor;
class SQLBooleanExpr 
: virtual public SQLExprImpl, 
virtual public SQLExpr, 
virtual public SQLLiteralExpr , 
virtual public SQLValuableExpr 
{
public:
  static SQLDataType_ptr DATA_TYPE;

  bool value;

  SQLBooleanExpr();

  SQLBooleanExpr(bool value);
  SHAREDOBJECT(SQLBooleanExpr);

  bool getBooleanValue();

  bool getValue();

  void setValue(bool value);

  void accept0(SQLASTVisitor_ptr visitor);

  void output(std::stringstream *  buf);

  int hashCode();

  bool equals(Object_ptr obj);

  SQLDataType_ptr computeDataType();

  // SQLBooleanExpr *clone();
  virtual SQLObject_ptr clone();
  SQLObject_list_ptr  getChildren();

  enum Type
  {
    ON_OFF
  };
};
